package com.ruoyi.project.common.config.service.impl;

import com.ruoyi.common.constant.RedisKey;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.text.Convert;
import com.ruoyi.project.common.config.domain.AppConfig;
import com.ruoyi.project.common.config.mapper.AppConfigMapper;
import com.ruoyi.project.common.config.service.IAppConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 配置参数Service业务层处理
 *
 * @author shixiangwen
 * @date 2020-02-02
 */
@Service
public class AppConfigServiceImpl implements IAppConfigService {

    private static final Logger log = LoggerFactory.getLogger(AppConfigServiceImpl.class);

    @Autowired
    private AppConfigMapper appConfigMapper;

    @Autowired
    @Qualifier("commonRedisTemplate")
    RedisTemplate<String, String> redisTemplate;

    /**
     * 查询配置参数
     *
     * @param id 配置参数ID
     * @return 配置参数
     */
    @Override
    public AppConfig selectAppConfigById(Long id) {
        return appConfigMapper.selectAppConfigById(id);
    }

    /**
     * 查询配置参数列表
     *
     * @param appConfig 配置参数
     * @return 配置参数
     */
    @Override
    public List<AppConfig> selectAppConfigList(AppConfig appConfig) {
        return appConfigMapper.selectAppConfigList(appConfig);
    }

    /**
     * 新增配置参数
     *
     * @param appConfig 配置参数
     * @return 结果
     */
    @Override
    public int insertAppConfig(AppConfig appConfig) {
        appConfig.setCreatedTime(DateUtils.getNowDate());
        return appConfigMapper.insertAppConfig(appConfig);
    }

    /**
     * 修改配置参数
     *
     * @param appConfig 配置参数
     * @return 结果
     */
    @Override
    public int updateAppConfig(AppConfig appConfig) {

        int ret = appConfigMapper.updateAppConfig(appConfig);

        AppConfig old = appConfigMapper.selectAppConfigById(appConfig.getId());
        String key = RedisKey.Common.getAppConfigKey(old.getApp(), old.getConfigKey());
        log.info("delete key {}", key);
        redisTemplate.delete(key);

        return ret;
    }

    /**
     * 删除配置参数对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteAppConfigByIds(String ids) {
        return appConfigMapper.deleteAppConfigByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除配置参数信息
     *
     * @param id 配置参数ID
     * @return 结果
     */
    @Override
    public int deleteAppConfigById(Long id) {
        AppConfig appConfig = this.selectAppConfigById(id);
        int ret = appConfigMapper.deleteAppConfigById(id);
        if (appConfig != null) {
            String key = RedisKey.Common.getAppConfigKey(appConfig.getApp(), appConfig.getConfigKey());
            redisTemplate.delete(key);
        }
        return ret;
    }
}
